Определение: Это некоторый набор правил по созданию API
ASP.NET Core кроссплатформенный в отличие от ASP.NET
var builder = WebApplication.CreateBuilder(args)
Пример:
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseAuthorization();
app.MapControllers();
app.Run();
}
var builder = Host.CreateDefaultBuilder(args);
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Startup должен содержать два метода:
Переменные которые отвечают за понимание ASP.NET Core в каком окружении оно запущено может происходить через одну из двух переменных:
Локально её переопределить можно через launchSettings.json
На этапе запуска приложение преобразует все источники конфигураций в единый словарь
Поставщики конфигурации это специальные классы, которые могут загружать конфигурацию из различных источников.
виды источников конфигурации:
Для создания своего кастомого поставщика нужно реализовать интерфейс IConfigurationProvider
Далее к словарю конфигураций можно обращаться через класс IConfiguration
Чтобы привести её к определенному классу прмиеняется метод
Services.Configure(Configuration)
ASP.NET Core поддерживает перезагрузку конфигураций на лету, но её нужно отдельно подключить
Контроллеры и экшены это уже часть другого фреймворка ASP.NET Core MVC
app.UseRouting();
app.UseEndpoints(endpoints ⇒ endpoints.MapControllers());
[Route("some/path")]
public class SomeController : ControllerBase
{
[HttpGet]
public async Task<List<ResponseClass>> GetResponseAsync(){
// Some code
}
}
Также можно регистрировать эндпоинты на основе соглашений
[Route("users/{id:int(min(1))}")]
[Route("[controller]/[action]")]
Типы:
Также, в случае если вам важен порядок выполнения фильтров то можно его задать через парметр атрибута или реализовывать более низкоуровнего, реализовав интерфейсы и подключив их к контроллеру через
services.AddControllers(x =>
{
x.Filters.AddService<SomeFilter>();
})
Также, если прям очень надо, можно делать так:
[MiddlewareFilter(typeof(SomeMiddleware))]